package helloworld;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class Customer {

    public static void main(String[] args) throws IOException, TimeoutException {
        // 创建连接RabbitMQ的连接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
        // 设置连接RabbitMQ主机
        connectionFactory.setHost("192.168.99.100");
        // 设置端口号
        connectionFactory.setPort(5672);
        // 设置连接哪个Virtual Hosts
        connectionFactory.setVirtualHost("/wwj");
        // 设置访问Virtual Hosts的用户
        connectionFactory.setUsername("wwj");
        connectionFactory.setPassword("123456");

        // 获取连接对象(这里直接抛异常)
        Connection connection = connectionFactory.newConnection();

        // 获取连接通道
        Channel channel = connection.createChannel();

        // 通道绑定消息队列==>注意绑定消息队列需要与生产者绑定消息队列参数一致
        // 参数一:队列名称，如果队列不存在则自动创建
        // 参数二:队列是否持久化，如果选择持久化就会在磁盘中存储，在RabbitMQ重启后会自动读进来，反正再次启动就不会有该队列
        //      注意这里是队列持久化，不是消息持久化，也就是重启后会有这个队列，但队列中消息还是没有了
        //      消息持久化为channel.basicPublish参数三设为MessageProperties.PERSISTENT_TEXT_PLAIN
        // 参数三:是否为独占队列，即是否只有当前通道(Channel)能够使用该队列
        // 参数四:是否在消费完成后自动删除队列
        // 参数五:附加参数(暂不讲解)
        channel.queueDeclare("hello", false, false, false, null);

        /***********************************上方代码与生产者一样****************************************/

        // 消费信息
        // 参数一:要消费的队列名称
        // 参数二:消息的自动确认机制
        // 参数三:消费时的回调接口
        // 返回服务端生成的消费者标识
        String hello = channel.basicConsume("hello", true, new DefaultConsumer(channel) {
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                System.out.println("消费消息回调:" + new String(body));
            }
        });


        System.out.println("服务端生成的消费者标识:" + hello);

        // 一般消费者不关闭，要一直监听
//        channel.close();
//        connection.close();

        /**
         * 输出
         * 服务端生成的消费者标识:amq.ctag-YoKRQ7tD7zr16J5whQ3Pmg
         * 消费消息回调:hello world
         */

    }

}
